﻿using System;
using System.Windows.Navigation;
using GalaSoft.MvvmLight;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using RssV_m_v.Model;
using System.Collections.ObjectModel;
using GalaSoft.MvvmLight.Command;


namespace RssV_m_v.ViewModel
{
    /// <summary>
    /// Classe permettant de gérer l'interface de la MainPage 
    /// </summary>
    public class MainViewModel : ViewModelBase
    {  
        private const string ListItemParis = "ListItemP";
        private const string ListItemLeMonde = "ListItemM";
        private const string ListItemFigaro = "ListItemF";
        
        private IRssService rssService;

        /// <summary>
        /// Liste des flux Rss du Parisien, avec getter et setter
        /// Binder avec la ListBox qui lui correspond dans MainPage.xaml
        /// </summary>
        private ObservableCollection<News> _listItemP = new ObservableCollection<News>();
        public ObservableCollection<News> ListItemP
        {
            get
            {
                return _listItemP;
            }
            set
            {
                if (_listItemP == value)
                {
                    return;
                }

                _listItemP = value;
                RaisePropertyChanged(ListItemParis);
            }
        }
        /// <summary>
        /// Liste des flux Rss du Figaro, avec getter et setter
        /// Binder avec la ListBox qui lui correspond dans MainPage.xaml
        /// </summary>
        private ObservableCollection<News> _listItemF = new ObservableCollection<News>();
        public ObservableCollection<News> ListItemF
        {
            get
            {
                return _listItemF;
            }
            set
            {
                if (_listItemF == value)
                {
                    return;
                }

                _listItemF = value;
                RaisePropertyChanged(ListItemFigaro);
            }
        }
        /// <summary>
        /// Liste des flux Rss du Monde, avec getter et setter
        /// Binder avec la ListBox qui lui correspond dans MainPage.xaml
        /// </summary>
        private ObservableCollection<News> _listItemM = new ObservableCollection<News>();
        public ObservableCollection<News> ListItemM
        {
            get
            {
                return _listItemM;
            }
            set
            {
                if (_listItemM == value)
                {
                    return;
                }

                _listItemM = value;
                RaisePropertyChanged(ListItemLeMonde);
            }
        }

        public void update(News n)
        {
            _listItemM.Add(n);
            RaisePropertyChanged(ListItemLeMonde);
        }

        private void updateNewsFigaro(ObservableCollection<News> items)
        {
            ListItemF = items;
        }
        private void updateNewsParis(ObservableCollection<News> items)
        {
            ListItemP = items;
        }
        private void updateNewsMonde(ObservableCollection<News> items)
        {
            ListItemM = items;
        }

        public RelayCommand AboutCommand { get; set; }
        public RelayCommand RefreshCommand { get; set; }

        private News _selectedItem;
        public News SelectedItem
        {
            get { return _selectedItem; }
            set
            {
                PhoneApplicationService.Current.State["News"] = value;
                ((PhoneApplicationFrame)App.Current.RootVisual).Navigate(new Uri("/DetailNews.xaml", UriKind.Relative));
            }
        }

        private void Refresh(IRssService rssService)
        {
            //Récupération de l'instance du Service de gestion des flux RSS
            //this.rssService = rssService;
            //Chargement des flux RSS du Figaro
            rssService.chargerRss("http://rss.lefigaro.fr/lefigaro/laune", updateNewsFigaro);
            //Chargement des flux RSS du Parisien
            rssService.chargerRss("http://rss.leparisien.fr/leparisien/rss/une.xml", updateNewsParis);
            //Chargement des flux RSS du Monde
            rssService.chargerRss("http://rss.lemonde.fr/c/205/f/3050/index.rss", updateNewsMonde);

        }
        /// <summary>
        /// Constructeur de la classe MainViewModel
        /// </summary>
        /// <param name="rssService">Service de gestion des flux RSS</param>
        public MainViewModel(IRssService rssService)
        {
            AboutCommand =
                new RelayCommand(
                    () =>
                    ((PhoneApplicationFrame)App.Current.RootVisual).Navigate(new Uri("/About.xaml", UriKind.Relative)));
            RefreshCommand = new RelayCommand( () => Refresh(rssService));
            //Récupération de l'instance du Service de gestion des flux RSS
            this.rssService = rssService;
            //Chargement des flux RSS du Figaro
            rssService.chargerRss("http://rss.lefigaro.fr/lefigaro/laune", updateNewsFigaro);
            //Chargement des flux RSS du Parisien
            rssService.chargerRss("http://rss.leparisien.fr/leparisien/rss/une.xml", updateNewsParis);
            //Chargement des flux RSS du Monde
            rssService.chargerRss("http://rss.lemonde.fr/c/205/f/3050/index.rss", updateNewsMonde);

        }
        
    }
}